#include "mythread.hpp"
#include <unistd.h>
#include <vector>

using namespace ThreadMoudle;
int tickets = 10000;
// void routine(const string &name)
// {
//     while (true)
//     {
//         if (tickets > 0)
//         {
//             cout << name << "buy a ticket..,tickerts num:" <<tickets<< endl;
//             tickets--;
//         }
//         else
//         {
//             break;
//         }
//     }
// }
pthread_mutex_t mutex=PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
void routine(const string &name)
{
    while (true)
    {
        pthread_mutex_lock(&mutex);
        if (tickets > 0)
        {
            cout << name << "buy a ticket..,tickerts num:" <<tickets<< endl;
            tickets--;
            pthread_mutex_unlock(&mutex);
        }
        else
        {
            pthread_mutex_unlock(&mutex);
            break;
        }
    }
}
int main()
{
    thread t1("thread-1", routine);
    thread t2("thread-2", routine);
    thread t3("thread-3", routine);
    thread t4("thread-4", routine);

    t1.start();
    t2.start();
    t3.start();
    t4.start();

    t1.join();
    t2.join();
    t3.join();
    t4.join();
}
// void routine(const string& name)
// {
//     int cnt=5;
//     while(cnt)
//     {
//         cout<<name<<" is runnunng"<<" cnt="<<cnt<<endl;
//         sleep(1);
//         cnt--;
//     }
// }

// int main()
// {
//     thread t1("thread_1",routine);
//     t1.start();
//     sleep(5);
//     t1.stop();
//     t1.join();
//     return 0;
// }

// const int num=5;
// int main()
// {
//     std::vector<thread> v;
//     for(int i=0;i<num;i++)
//     {
//         char buffer[128];
//         snprintf(buffer,sizeof(buffer),"thread-%d",i+1);
//         v.emplace_back(buffer,routine);
//     }
//     for(int i=0;i<num;i++)
//     {
//         v[i].start();
//     }
//     sleep(10);
//     for(int i=0;i<num;i++)
//     {
//         v[i].stop();
//     }
//     for(int i=0;i<num;i++)
//     {
//         v[i].join();
//     }
// }